// 这道题最核心的地方在于利用状态的转换，状态机
// f[i][j][1]表示只考虑前i天，并且当前正在进行第j比交易，状态转换：
// f[i][j][1] = max(f[i - 1][j - 1][0] - w[i], f[i - 1][j][1])
// f[i][j][0]表示只考虑前i天，并且当前已经完成第j比交易，状态转换:
// f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j][1] + w[i])

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 100010, M = 100;
int f[M][2];

int main()
{
    int n, k;
    cin >> n >> k;
    memset(f, -0x3f, sizeof f);
    f[0][0] = 0;
    for (int i = 0; i < n; ++i)
    {
        int w;
        cin >> w;
        for (int j = k; j > 0; --j)
        {
            f[j][0] = max(f[j][0], f[j][1] + w);
            f[j][1] = max(f[j - 1][0] - w, f[j][1]);
        }
    }
    int res = 0;
    for (int i = 1; i <= k; ++i)
        res = max(res, max(f[i][1], f[i][0]));
    cout << res << endl;
    return 0;
}
